﻿using MusicPlayerPlus.Interface.Model.Enum;
using MusicPlayerPlus.Interface.Model.Muisc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MusicPlayerPlus.Core.Reflection.ActionParam.Action.Output
{
    #region Base

    /// <summary>
    /// 输出信息到日志接口
    /// </summary>
    public class APInputLogAction
    {
        public System.Action<string> InputLog { get; set; }
    }

    /// <summary>
    /// 添加按钮动作接口
    /// </summary>
    public class APAddToButtonAction
    {
        public Action<string, System.Action> AddToButton { get; set; }
    }
    /// <summary>
    /// 添加菜单动作接口
    /// </summary>
    public class APAddToMenuAction
    {
        public Action<string, System.Action> AddToMenu { get; set; }
    }
    /// <summary>
    /// 设置主窗体
    /// </summary>
    public class APSetMainWindow
    {
        public Action<object> SetMainWindow { get; set; }
    }
    /// <summary>
    /// 主窗体 显示
    /// </summary>
    public class APMainWindowShow
    {
        public System.Action MainWindowShow { get; set; }
    }
    /// <summary>
    /// 主窗体 隐藏
    /// </summary>
    public class APMainWindowHide
    {
        public System.Action MainWindowHide { get; set; }
    }

    /// <summary>
    /// 主窗体 最小化
    /// </summary>
    public class APMainWindowMin
    {
        public System.Action MainWindowMin{ get; set; }
    }
    /// <summary>
    /// 主窗体 最大化
    /// </summary>
    public class APMainWindowMax
    {
        public System.Action MainWindowMax { get; set; }
    }
    #endregion

    #region Media

    /// <summary>
    /// (改变后事件)进度条改变
    /// </summary>
    public class APTimeLineChangeAction
    {
        public System.Action<double, double> TimeLineChange { get; set; }
    }
    /// <summary>
    /// (主动)进度条改变
    /// </summary>
    public class APChangeTimeLineAction
    {
        public System.Action<double> ChangeTimeLine{ get; set; }
    }
    /// <summary>
    /// (改变后事件)音量改变
    /// </summary>
    public class APVolumeChangeAction
    {
        public System.Action<double> VolumeChange { get; set; }
    }
    /// <summary>
    /// (主动)音量改变
    /// </summary>
    public class APChangeVolumeAction
    {
        public System.Action<double> ChangeVolume { get; set; }
    }
    /// <summary>
    /// 缓冲进度条改变
    /// </summary>
    public class APBufferingTimeLineChangeAction
    {
        public System.Action<double, double> BufferingTimeLineChange { get; set; }
    }
    /// <summary>
    /// 播放状态改变
    /// </summary>
    public class APPlayStateChangeAction
    {
        public System.Action<MediaPlayState> PlayStateChange { get; set; }
    }
    /// <summary>
    /// 播放顺序改变
    /// </summary>
    public class APPlayOrderChangeAction
    {
        public Action<MediaPlayPlayOrder> PlayPlayOrderChange { get; set; }
    }
    /// <summary>
    /// 播放
    /// </summary>
    public class APPlayAction
    {
        public System.Action Play { get; set; }
    }
    /// <summary>
    /// 暂停
    /// </summary>
    public class APPauseAction
    {
        public System.Action Pause { get; set; }
    }
    /// <summary>
    /// 停止
    /// </summary>
    public class APStopAction
    {
        public System.Action Stop { get; set; }
    }
    /// <summary>
    /// 上一首
    /// </summary>
    public class APPreviousTrackAction
    {
        public System.Action PreviousTrack { get; set; }
    }
    /// <summary>
    /// 下一首
    /// </summary>
    public class APNextTrackAction
    {
        public System.Action NextTrack { get; set; }
    }

    #endregion

    #region MusicList

    /// <summary>
    /// 获取列表
    /// </summary>
    public class APGetMusicListAction
    {
        public Func<IList<MusicItem>> GetMusicList { get; set; }
    }
    /// <summary>
    /// 改变列表
    /// </summary>
    public class APChangeMusicListAction
    {
        public Action<Guid> ChangeMusicList { get; set; }
    }
    /// <summary>
    /// 添加列表
    /// </summary>
    public class APAddMusicListAction
    {
        public Action<IList<MusicItem>> AddMusicList { get; set; }
    }
    /// <summary>
    /// 获取播放的音乐
    /// </summary>
    public class APGetPlayMusicAction
    {
        public Func<MusicItem> GetPlayMusic { get; set; }
    }
    /// <summary>
    /// 设置播放的音乐
    /// </summary>
    public class APSetPlayMusicAction
    {
        public Action<MusicItem> SetPlayMusic { get; set; }
    }
    /// <summary>
    /// 添加歌曲
    /// </summary>
    public class APAddMusicAction
    {
        public Action<MusicItem> AddMusic { get; set; }
    }
    /// <summary>
    /// 改变歌曲
    /// </summary>
    public class APChangeMusicAction
    {
        public Action<MusicItem> ChangeMusic { get; set; }
    }
    /// <summary>
    /// 删除歌曲
    /// </summary>
    public class APDeleteMusicAction
    {
        public Action<MusicItem> DeleteMusic { get; set; }
    }

    #endregion

    #region PlayList

    /// <summary>
    /// 获取所有的播放列表
    /// </summary>
    public class APGetPlayListAction
    {
        public Func<IList<PlayList>> GetPlayList { get; set; }
    }
    /// <summary>
    /// 改变播放列表
    /// </summary>
    public class APChangePlayListAction
    {
        public Func<PlayList, bool> ChangePlayList { get; set; }
    }
    /// <summary>
    /// 添加播放列表
    /// </summary>
    public class APAddPlayListAction
    {
        public Func<PlayList, bool> AddPlayList { get; set; }
    }
    /// <summary>
    /// 删除播放列表
    /// </summary>
    public class APDeletePlayListAction
    {
        public Func<PlayList, bool> DeletePlayList { get; set; }
    }

    /// <summary>
    /// 获取指定的播放列表
    /// </summary>
    public class APGetPlayListForGuidAction
    {
        public Func<Guid, PlayList> GetPlayListForGuid { get; set; }
    }
    /// <summary>
    /// 播放中的列表
    /// </summary>
    public class APGetPlayingPlayListAction
    {
        public Func<PlayList> GetPlayingPlayList { get; set; }
    }

    #endregion

    #region Dictionary

    /// <summary>
    /// 获取Dictionary数据
    /// </summary>
    public class APGetDictionaryData
    {
        public Func<Guid, object> GetDictionaryData { get; set; }
    }
    /// <summary>
    /// 添加Dictionary数据
    /// </summary>
    public class APAddDictionaryData
    {
        public Func<Guid, object, bool> AddDictionaryData { get; set; }
    }
    /// <summary>
    /// 改变Dictionary数据
    /// </summary>
    public class APChangeDictionaryData
    {
        public Func<Guid, object, bool> ChangeDictionaryData { get; set; }
    }
    /// <summary>
    /// 删除Dictionary数据
    /// </summary>
    public class APDeleteDictionaryData
    {
        public Func<Guid, bool> DeleteDictionaryData { get; set; }
    }

    /// <summary>
    /// 触发定向通道
    /// </summary>
    public class APOrientationAction
    {
        public Action<string, string, object> OrientationAction { get; set; }
    }
    #endregion
}
